#!/usr/bin/python
# -*- coding: latin-1 -*-

"""App para Bottle de constancia.py
"""
__license__ = "MIT"
__version__ = "0.02"

import sys

#Parche para que pueda cargar opciones.py con py2exe
if len(sys.path) == 1:
    sys.path.append(sys.prefix)

import os
import webbrowser
import uuid

import bottle
from bottle import route, run, response, static_file, request, template

import opciones
from constancia import Constancia

constancias = {}
bottle.debug(True)


@route('/constancia/:cuit')
@route('/constancia/:cuit/:action')
def cons(cuit, action=None):

    response.set_header('Cache-Control', ' no-cache, must-revalidate')

    # Obtenemos la id del usuario
    uid = request.get_cookie("id")

    # /constancia/captcha
    if cuit == "captcha":

        if not uid or uid not in constancias:
            print "ERROR: not uid"
            return "Habilitar cookies y refrescar la página"

        c = constancias[uid]

        response.content_type = 'image/gif'
        return c.captcha_img

    if not uid:
        # Primera visita, le damos un id al user
        uid = uuid.uuid4().bytes.encode("base64")[:21]
        response.set_cookie("id", uid)
        constancias[uid] = Constancia(uid)
    elif uid not in constancias:
        # Teníamos id pero no está registrada en el dict de constancias
        # Así que creamos un nuevo objeto constancia
        constancias[uid] = Constancia(uid)

    # Para no tipear tanto
    c = constancias[uid]

    # Se fija si está el número de captcha por parámetro
    numcaptcha = request.query.captcha

    if numcaptcha:
        c.numcaptcha = numcaptcha
        c.okcookie = True

    if not c.bajar(cuit):
        # Si hubo error en bajar la constancia

        if c.html == "CAPTCHA INCORRECTA":
            if c.bajar_captcha():
                return static_file("captchaform.html", "static")
            else:
                return "ERROR, no puedo obtener captcha"
        elif c.html == "CUIT INCORRECTA":
            return c.html
        else:
            response.content_type = 'text/html; charset=latin9'
            return c.html
    else:
        # Si tenemos una constancia lista para mostrar
        response.content_type = 'text/plain; charset=latin9'
        if c.html:
            if action == "datos":
                d = c.datos()
                t = d['CuitCompleto'] + "\n"
                t += d['RazonSocial'] + "\n"
                t += d['DomicilioFiscal'] + "\n"
                return t

            response.content_type = 'text/html; charset=latin9'
            return c.html
        else:
            return "ERROR, algo raro pasó acá"

@route('/IIBB-CBA/:cuit')
@route('/IIBB-CBA/:cuit/:action')
def consIIBB(cuit, action=None):

    response.set_header('Cache-Control', ' no-cache, must-revalidate')

    # Obtenemos la id del usuario
    uid = request.get_cookie("id")

    if not uid:
        # Primera visita, le damos un id al user
        uid = uuid.uuid4().bytes.encode("base64")[:21]
        response.set_cookie("id", uid)
        constancias[uid] = Constancia(uid)
    elif uid not in constancias:
        # Teníamos id pero no está registrada en el dict de constancias
        # Así que creamos un nuevo objeto constancia
        constancias[uid] = Constancia(uid)

    # Para no tipear tanto
    c = constancias[uid]

    oIIBB = c.bajar_IIBB_Cba(cuit)
    if not oIIBB:
        # Si hubo error en bajar la constancia
        return "Error al bajar constancia IIBB Cba"
    else:
        # Si tenemos una constancia lista para mostrar
        response.content_type = 'text/plain; charset=utf-8'
        d = c.get_datos_IIBB_Cba(oIIBB)
        if action == "datos":
            if d:
                return '\n'.join(d)
            else:
                return 'No hay datos'
        else:
            if d:
                return d[0]    #Número de IIBB
            else:
                return 'No hay datos'


@route('/padron-puc-constancia-internet/:path/:files')
def staticfiles(path, files):
    return static_file(path + "/" + files, "static")


@route('/favicon.ico')
def favicon():
    return static_file("/favicon.ico", "static")


@route('/')
def index():
    response.content_type = 'text/html; charset=utf-8'
    return static_file("/index.html", "static")


webbrowser.open("http://localhost:" + str(opciones.puerto))
run(host='0.0.0.0', port=opciones.puerto)
